package cn.cdutetc.library.service;

import cn.cdutetc.library.entity.dto.PaymentDTO;
import cn.cdutetc.library.entity.dto.PaymentStatisticsVO;
import cn.cdutetc.library.entity.dto.PaymentVO;
import cn.cdutetc.library.entity.pojo.Payment;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 支付服务接口
 */
public interface PaymentService extends IService<Payment> {

    /**
     * 创建支付记录
     * @param paymentDTO 支付信息
     * @return 支付ID
     */
    Integer createPayment(PaymentDTO paymentDTO);

    /**
     * 完成支付
     * @param paymentId 支付ID
     * @param payMethod 支付方式
     * @return 是否成功
     */
    boolean completePayment(Integer paymentId, String payMethod);

    /**
     * 取消支付
     * @param paymentId 支付ID
     * @return 是否成功
     */
    boolean cancelPayment(Integer paymentId);

    /**
     * 获取支付详情
     * @param paymentId 支付ID
     * @return 支付详情
     */
    PaymentVO getPaymentById(Integer paymentId);

    /**
     * 分页查询支付记录
     * @param page 页码
     * @param size 每页大小
     * @param keyword 搜索关键词
     * @param paymentType 支付类型
     * @param status 支付状态
     * @return 分页结果
     */
    IPage<PaymentVO> pagePayments(Integer page, Integer size, String keyword, String paymentType, String status);

    /**
     * 获取用户支付统计
     * @param userId 用户ID
     * @return 支付总额
     */
    Double getUserPaymentTotal(Integer userId);

    /**
     * 处理借阅罚款支付
     * @param recordId 借阅记录ID
     * @param payMethod 支付方式
     * @return 是否成功
     */
    boolean handleBorrowFinePayment(Integer recordId, String payMethod);

    /**
     * 获取支付统计数据
     * @return 支付统计信息
     */
    PaymentStatisticsVO getPaymentStatistics();

    /**
     * 获取用户支付记录
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页大小
     * @param feeType 费用类型
     * @param status 支付状态
     * @return 分页结果
     */
    IPage<PaymentVO> getUserPayments(Integer userId, Integer page, Integer size, String feeType, String status);

    /**
     * 获取用户支付统计
     * @param userId 用户ID
     * @return 用户支付统计信息
     */
    PaymentStatisticsVO getUserPaymentStatistics(Integer userId);
}